home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / jcool01.zip / TEST_BT.C < prev    next >
C/C++ Source or Header  |  1992-08-20  |  19KB  |  463 lines

  1. //
  2. // Copyright (C) 1991 Texas Instruments Incorporated.
  3. //
  4. // Permission is granted to any individual or institution to use, copy, modify,
  5. // and distribute this software, provided that this complete copyright and
  6. // permission notice is maintained, intact, in all copies and supporting
  7. // documentation.
  8. //
  9. // Texas Instruments Incorporated provides this software "as is" without
  10. // express or implied warranty.
  11. //
  12. // Updated: JAM 08/19/92 -- modernized template syntax, remove macro hacks
  13.  
  14. #include <cool/String.h>
  15. #include <cool/Binary_Node.h>
  16. #include <cool/Binary_Node.C>
  17. #include <cool/Binary_Tree.h>
  18. #include <cool/Binary_Tree.C>
  19. #include <test.h>
  20.  
  21. void test_int_remove(CoolBinary_Tree<int>&);
  22.  
  23. void test_int_put () {  
  24.   CoolBinary_Tree<int> b0;
  25.  
  26.   TEST ("b0.put(10)", b0.put(10), TRUE);
  27.   TEST ("b0.tree_depth()", b0.tree_depth(), 0);
  28.   TEST ("b0.put(7)", b0.put(7), TRUE);
  29.   TEST ("b0.tree_depth()", b0.tree_depth(), 1);
  30.   TEST ("b0.put(15)", b0.put(15), TRUE);
  31.   TEST ("b0.tree_depth()", b0.tree_depth(), 1);
  32.   TEST ("b0.put(8)", b0.put(8), TRUE);
  33.   TEST ("b0.tree_depth()", b0.tree_depth(), 2);
  34.   TEST ("b0.put(2)", b0.put(2), TRUE);
  35.   TEST ("b0.tree_depth()", b0.tree_depth(), 2);
  36.   TEST ("b0.put(12)", b0.put(12), TRUE);
  37.   TEST ("b0.tree_depth()", b0.tree_depth(), 2);
  38.   TEST ("b0.put(4)", b0.put(4), TRUE);
  39.   TEST ("b0.tree_depth()", b0.tree_depth(), 3);
  40.   TEST ("b0.put(6)", b0.put(6), TRUE);
  41.   TEST ("b0.tree_depth()", b0.tree_depth(), 4);
  42.   TEST ("b0.put(5)", b0.put(5), TRUE);
  43.   TEST ("b0.tree_depth()", b0.tree_depth(), 5);
  44.   TEST ("b0.put(14)", b0.put(14), TRUE);
  45.   TEST ("b0.tree_depth()", b0.tree_depth(), 5);
  46.   TEST ("b0.put(11)", b0.put(11), TRUE);
  47.   TEST ("b0.tree_depth()", b0.tree_depth(), 5);
  48.   TEST ("b0.count()", b0.count(), 11);
  49.  
  50.   TEST ("b0.find(5),b0.node()->is_leaf()", 
  51.         (b0.find(5),b0.node()->is_leaf()), TRUE);
  52.   TEST ("b0.find(8),b0.node()->is_leaf()",
  53.         (b0.find(8),b0.node()->is_leaf()), TRUE);
  54.   TEST ("b0.find(11),b0.node()->is_leaf()",
  55.         (b0.find(11),b0.node()->is_leaf()), TRUE);
  56.   TEST ("b0.find(14),b0.node()->is_leaf()",
  57.         (b0.find(14),b0.node()->is_leaf()), TRUE);
  58.   TEST ("b0.find(10),b0.node() == b0.get_root()",
  59.         (b0.find(10),b0.node() == b0.get_root()), TRUE);
  60.   test_int_remove (b0);
  61. }
  62.  
  63. void test_int_remove (CoolBinary_Tree<int>& b0) {
  64.   CoolBinary_Node<int>* n0;
  65.     
  66.   TEST ("b0.remove(7)", b0.remove(7), TRUE);
  67.   TEST ("b0.find(7)", b0.find(7), FALSE);
  68.   TEST ("b0.count()", b0.count(), 10);
  69.   TEST ("b0.tree_depth()", b0.tree_depth(), 4);
  70.   TEST ("b0.find(6)", b0.find(6), TRUE);
  71.   TEST ("(b0.node() == b0.get_root()->get_ltree())",
  72.          (b0.node() == b0.get_root()->get_ltree()), TRUE);
  73.   TEST ("b0.find(5)",b0.find(5),TRUE);
  74.   n0 = b0.node();
  75.   TEST ("(n0 == (b0.find(4),b0.node()->get_rtree()))",
  76.          (n0 == (b0.find(4),b0.node()->get_rtree())), TRUE);
  77.   TEST ("b0.find(8)",b0.find(8),TRUE);
  78.   n0 = b0.node();
  79.   TEST ("(n0 == (b0.find(6),b0.node()->get_rtree()))",
  80.          (n0 == (b0.find(6),b0.node()->get_rtree())), TRUE);
  81.  
  82.   TEST ("b0.remove(12)", b0.remove(12), TRUE);
  83.   TEST ("b0.find(12)", b0.find(12), FALSE);
  84.   TEST ("b0.count()", b0.count(), 9);
  85.   TEST ("b0.tree_depth()", b0.tree_depth(), 4);
  86.   TEST ("b0.find(11)",b0.find(11), TRUE);
  87.   n0 = b0.node();
  88.   TEST ("(n0 == (b0.find(15),b0.node()->get_ltree()))",
  89.          (n0 == (b0.find(15),b0.node()->get_ltree())), TRUE);
  90.   TEST ("b0.find(14)",b0.find(14), TRUE);
  91.   n0 = b0.node();
  92.   TEST ("(n0 == (b0.find(11),b0.node()->get_rtree()))",
  93.          (n0 == (b0.find(11),b0.node()->get_rtree())), TRUE);
  94.  
  95.  
  96.   TEST ("b0.remove(10)", b0.remove(10), TRUE);
  97.   TEST ("b0.count()", b0.count(), 8);
  98.   TEST ("b0.tree_depth()", b0.tree_depth(), 4);
  99.   TEST ("b0.find(10)", b0.find(10), FALSE);
  100.   TEST ("b0.get_root() == (b0.find(8),b0.node())",
  101.         b0.get_root() == (b0.find(8),b0.node()), TRUE)
  102.   TEST ("b0.find(6)",b0.find(6), TRUE);
  103.   n0 = b0.node();
  104.   TEST ("(n0 == (b0.find(8),b0.node()->get_ltree()))",
  105.          (n0 == (b0.find(8),b0.node()->get_ltree())), TRUE);
  106.  
  107.   TEST ("b0.remove(5)", b0.remove(5), TRUE);
  108.   TEST ("b0.count()", b0.count(), 7);
  109.   TEST ("b0.tree_depth()", b0.tree_depth(), 3);
  110.  
  111.   TEST ("b0.remove(2)", b0.remove(2), TRUE);
  112.   TEST ("b0.count()", b0.count(), 6);
  113.   TEST ("b0.tree_depth()", b0.tree_depth(), 3);
  114.   TEST ("b0.find(4)",b0.find(4), TRUE);
  115.   n0 = b0.node();
  116.   TEST ("(n0 == (b0.find(6),b0.node()->get_ltree()))",
  117.          (n0 == (b0.find(6),b0.node()->get_ltree())), TRUE);
  118.  
  119.   TEST ("b0.remove(15)", b0.remove(15), TRUE);
  120.   TEST ("b0.count()", b0.count(), 5);
  121.   TEST ("b0.find(11)",b0.find(11), TRUE);
  122.   TEST ("((b0.node())==(b0.get_root()->get_rtree()))",
  123.          ((b0.node())==(b0.get_root()->get_rtree())), TRUE);
  124.  
  125.   TEST ("b0.remove(14)", b0.remove(14), TRUE);
  126.   TEST ("b0.count()", b0.count(), 4);
  127.   TEST ("b0.tree_depth()", b0.tree_depth(), 2);
  128.   TEST ("b0.find(11),b0.node()->is_leaf()",
  129.     (b0.find(11),b0.node()->is_leaf()), TRUE);
  130.  
  131.   TEST ("b0.remove(8)", b0.remove(8), TRUE);
  132.   TEST ("b0.count()", b0.count(), 3);
  133.   TEST ("b0.tree_depth()", b0.tree_depth(), 1);
  134.   TEST ("b0.get_root()==(b0.find(6),b0.node())",
  135.         (b0.get_root()==(b0.find(6),b0.node())), TRUE);
  136.   TEST ("b0.find(4)",b0.find(4), TRUE);
  137.   n0 = b0.node();
  138.   TEST ("(n0==(b0.find(6),b0.node()->get_ltree()))",
  139.          (n0==(b0.find(6),b0.node()->get_ltree())), TRUE);
  140.  
  141.   TEST ("b0.remove(11)", b0.remove(11), TRUE);
  142.   TEST ("b0.count()", b0.count(), 2);
  143.   TEST ("b0.tree_depth()", b0.tree_depth(), 1);
  144.  
  145.   TEST ("b0.remove(6)", b0.remove(6), TRUE);
  146.   TEST ("b0.count()", b0.count(), 1);
  147.   TEST ("b0.tree_depth()", b0.tree_depth(), 0);
  148.   TEST ("b0.get_root()==(b0.find(4),b0.node())",
  149.         (b0.get_root()==(b0.find(4),b0.node())), TRUE);
  150.   TEST ("b0.get_root()->is_leaf()",
  151.         (b0.get_root()->is_leaf()), TRUE);
  152.  
  153.   TEST ("b0.remove(4)", b0.remove(4), TRUE);
  154.   TEST ("b0.count()", b0.count(), 0);
  155.   TEST ("b0.tree_depth()", b0.tree_depth(), 0);
  156.   TEST ("b0.get_root()==NULL", (b0.get_root()==NULL), TRUE);
  157.  
  158. }
  159.  
  160. void test_int () {  
  161.   CoolBinary_Tree<int> b0;
  162.  
  163.   TEST ("CoolBinary_Tree<int> b0", b0.count(), 0);
  164.   TEST ("b0.put(1)", b0.put(1), TRUE);
  165.   TEST ("b0.count()", b0.count(), 1);
  166.   TEST ("b0.find(1)", b0.find(1), TRUE);
  167.   TEST ("b0.value()", b0.value(), 1);
  168.   TEST ("b0.remove()", b0.remove(), TRUE);
  169.   TEST ("b0.count()", b0.count(), 0);
  170.   TEST ("b0.put(4)", b0.put(4), TRUE);
  171.   TEST ("b0.count()", b0.count(), 1);
  172.   TEST ("b0.put(8)", b0.put(8), TRUE);
  173.   TEST ("b0.count()", b0.count(), 2);
  174.   TEST ("b0.put(3)", b0.put(3), TRUE);
  175.   TEST ("b0.count()", b0.count(), 3);
  176.   TEST ("b0.put(1)", b0.put(1), TRUE);
  177.   TEST ("b0.count()", b0.count(), 4);
  178.   TEST ("b0.put(2)", b0.put(2), TRUE);
  179.   TEST ("b0.count()", b0.count(), 5);
  180.   TEST ("b0.put(6)", b0.put(6), TRUE);
  181.   TEST ("b0.count()", b0.count(), 6);
  182.   TEST ("b0.find(2)", b0.find(2), TRUE);
  183.   TEST ("b0.value()", b0.value(), 2);
  184.   TEST ("b0.reset()", (b0.reset(), 1), 1);
  185.   TEST ("b0.next()", b0.next(), TRUE);
  186.   TEST ("b0.value()", b0.value(), 1);
  187.   TEST ("b0.next()", b0.next(), TRUE);
  188.   TEST ("b0.value()", b0.value(), 2);
  189.   TEST ("b0.next()", b0.next(), TRUE);
  190.   TEST ("b0.value()", b0.value(), 3);
  191.   TEST ("b0.next()", b0.next(), TRUE);
  192.   TEST ("b0.value()", b0.value(), 4);
  193.   TEST ("b0.prev()", b0.prev(), TRUE);
  194.   TEST ("b0.value()", b0.value(), 3);
  195.   TEST ("b0.prev()", b0.prev(), TRUE);
  196.   TEST ("b0.value()", b0.value(), 2);
  197.   TEST ("b0.next()", b0.next(), TRUE);
  198.   TEST ("b0.value()", b0.value(), 3);
  199.   TEST ("b0.next()", b0.next(), TRUE);
  200.   TEST ("b0.value()", b0.value(), 4);
  201.   TEST ("b0.next()", b0.next(), TRUE);
  202.   TEST ("b0.value()", b0.value(), 6);
  203.   TEST ("b0.next()", b0.next(), TRUE);
  204.   TEST ("b0.value()", b0.value(), 8);
  205.   TEST ("b0.count()", b0.count(), 6);
  206.   TEST ("b0.find(99)", b0.find(99), FALSE);
  207.   CoolBinary_Tree<int> b1(b0);
  208.   TEST ("CoolBinary_Tree<int> b1(b0)", b1.count(), 6);
  209.   TEST ("b1.remove(3)", b1.remove(3), TRUE);
  210.   TEST ("b1.count()", b1.count(), 5);
  211.   TEST ("b1.find(3)", b1.find(3), FALSE);
  212.   TEST ("b0.balance()", (b0.balance(), b0.count()), 6);
  213.   TEST ("b0.remove(3)", b0.remove(3), TRUE);
  214.   TEST ("b0.count()", b0.count(), 5);
  215.   TEST ("b0.find(3)", b0.find(3), FALSE);
  216.   TEST ("b0.put(-3)", b0.put(-3), TRUE);
  217.   TEST ("b0.count()", b0.count(), 6);
  218.   TEST ("b0.put(18)", b0.put(18), TRUE);
  219.   TEST ("b0.count()", b0.count(), 7);
  220.   TEST ("b0.put(13)", b0.put(13), TRUE);
  221.   TEST ("b0.count()", b0.count(), 8);
  222.   TEST ("b0.put(1)", b0.put(1), FALSE);
  223.   TEST ("b0.count()", b0.count(), 8);
  224.   TEST ("b0.put(5)", b0.put(5), TRUE);
  225.   TEST ("b0.count()", b0.count(), 9);
  226.   TEST ("b0.put(17)", b0.put(17), TRUE);
  227.   TEST ("b0.count()", b0.count(), 10);
  228.   TEST ("b0.put(3)", b0.put(3), TRUE);
  229.   TEST ("b0.count()", b0.count(), 11);
  230.   TEST ("b0.balance()", (b0.balance(), b0.count()), 11);
  231.   TEST ("b0.find(3)", b0.find(3), TRUE);
  232.   TEST ("b0.find(8)", b0.find(8), TRUE);
  233.   TEST ("b0.find(9)", b0.find(9), FALSE);
  234.   TEST ("b0.find(-3)", b0.find(-3), TRUE);
  235.   TEST ("b0.find(17)", b0.find(17), TRUE);
  236.   TEST ("b1=b0", (b1=b0, b0.count() == b1.count()), 1);
  237.   TEST ("b1.find(3)", b1.find(3), TRUE);
  238.   TEST ("b1.find(8)", b1.find(8), TRUE);
  239.   TEST ("b1.find(9)", b1.find(9), FALSE);
  240.   TEST ("b1.find(-3)", b1.find(-3), TRUE);
  241.   TEST ("b1.find(17)", b1.find(17), TRUE);
  242. }  
  243.  
  244. int my_comp (char* const& s1, char* const& s2) {
  245.   return strcmp (s1, s2);
  246. }
  247.  
  248. void test_charP () {  
  249.   CoolBinary_Tree<char*> s0;
  250.   TEST ("CoolBinary_Tree<char*> s0", s0.count(), 0);
  251.   TEST ("s0.set_compare(&my_comp)",(s0.set_compare(&my_comp),1),1);
  252.   TEST ("s0.put(\"LLL\")", s0.put("LLL"), TRUE);
  253.   TEST ("s0.count()", s0.count(), 1);
  254.   TEST ("s0.find(\"LLL\")", s0.find("LLL"), TRUE);
  255.   TEST ("s0.value()", (strcmp (s0.value(),"LLL")), 0);
  256.   TEST ("s0.remove()", s0.remove(), TRUE);
  257.   TEST ("s0.count()", s0.count(), 0);
  258.   TEST ("s0.put(\"DDD\")", s0.put("DDD"), TRUE);
  259.   TEST ("s0.count()", s0.count(), 1);
  260.   TEST ("s0.put(\"HHH\")", s0.put("HHH"), TRUE);
  261.   TEST ("s0.count()", s0.count(), 2);
  262.   TEST ("s0.put(\"CCC\")", s0.put("CCC"), TRUE);
  263.   TEST ("s0.count()", s0.count(), 3);
  264.   TEST ("s0.put(\"LLL\")", s0.put("LLL"), TRUE);
  265.   TEST ("s0.count()", s0.count(), 4);
  266.   TEST ("s0.put(\"BBB\")", s0.put("BBB"), TRUE);
  267.   TEST ("s0.count()", s0.count(), 5);
  268.   TEST ("s0.put(\"FFF\")", s0.put("FFF"), TRUE);
  269.   TEST ("s0.count()", s0.count(), 6);
  270.   TEST ("s0.find(\"BBB\")", s0.find("BBB"), TRUE);
  271.   TEST ("s0.value()", (strcmp (s0.value(),"BBB")), 0);
  272.   TEST ("s0.reset()", (s0.reset(), 1), 1);
  273.   TEST ("s0.next()", s0.next(), TRUE);
  274.   TEST ("s0.value()", (strcmp (s0.value(),"BBB")), 0);
  275.   TEST ("s0.next()", s0.next(), TRUE);
  276.   TEST ("s0.value()", (strcmp (s0.value(),"CCC")), 0);
  277.   TEST ("s0.next()", s0.next(), TRUE);
  278.   TEST ("s0.value()", (strcmp (s0.value(),"DDD")), 0);
  279.   TEST ("s0.next()", s0.next(), TRUE);
  280.   TEST ("s0.value()", (strcmp (s0.value(),"FFF")), 0);
  281.   TEST ("s0.prev()", s0.prev(), TRUE);
  282.   TEST ("s0.value()", (strcmp (s0.value(),"DDD")), 0);
  283.   TEST ("s0.prev()", s0.prev(), TRUE);
  284.   TEST ("s0.value()", (strcmp (s0.value(),"CCC")), 0);
  285.   TEST ("s0.next()", s0.next(), TRUE);
  286.   TEST ("s0.value()", (strcmp (s0.value(),"DDD")), 0);
  287.   TEST ("s0.next()", s0.next(), TRUE);
  288.   TEST ("s0.value()", (strcmp (s0.value(),"FFF")), 0);
  289.   TEST ("s0.next()", s0.next(), TRUE);
  290.   TEST ("s0.value()", (strcmp (s0.value(),"HHH")), 0);
  291.   TEST ("s0.next()", s0.next(), TRUE);
  292.   TEST ("s0.value()", (strcmp (s0.value(),"LLL")), 0);
  293.   TEST ("s0.count()", s0.count(), 6);
  294.   TEST ("s0.find(\"JJJ\")", s0.find("JJJ"), FALSE);
  295.   CoolBinary_Tree<char*> s1(s0);
  296.   TEST ("CoolBinary_Tree<char*> s1(s0)", s1.count(), 6);
  297.   TEST ("s0.balance()", (s0.balance(), s0.count()), 6);
  298.   TEST ("s1.remove(\"CCC\")", s1.remove("CCC"), TRUE);
  299.   TEST ("s1.count()", s1.count(), 5);
  300.   TEST ("s1.find(\"CCC\")", s1.find("CCC"), FALSE);
  301.   TEST ("s0.remove(\"CCC\")", s0.remove("CCC"), TRUE);
  302.   TEST ("s0.count()", s0.count(), 5);
  303.   TEST ("s0.find(\"CCC\")", s0.find("CCC"), FALSE);
  304.   TEST ("s0.put(\"KKK\")", s0.put("KKK"), TRUE);
  305.   TEST ("s0.count()", s0.count(), 6);
  306.   TEST ("s0.put(\"MMM\")", s0.put("MMM"), TRUE);
  307.   TEST ("s0.count()", s0.count(), 7);
  308.   TEST ("s0.put(\"NNN\")", s0.put("NNN"), TRUE);
  309.   TEST ("s0.count()", s0.count(), 8);
  310.   TEST ("s0.put(\"LLL\")", s0.put("LLL"), FALSE);
  311.   TEST ("s0.count()", s0.count(), 8);
  312.   TEST ("s0.put(\"EEE\")", s0.put("EEE"), TRUE);
  313.   TEST ("s0.count()", s0.count(), 9);
  314.   TEST ("s0.put(\"GGG\")", s0.put("GGG"), TRUE);
  315.   TEST ("s0.count()", s0.count(), 10);
  316.   TEST ("s0.put(\"CCC\")", s0.put("CCC"), TRUE);
  317.   TEST ("s0.count()", s0.count(), 11);
  318.   TEST ("s0.balance()", (s0.balance(), s0.count()), 11);
  319.   TEST ("s0.find(\"CCC\")", s0.find("CCC"), TRUE);
  320.   TEST ("s0.find(\"HHH\")", s0.find("HHH"), TRUE);
  321.   TEST ("s0.find(\"III\")", s0.find("III"), FALSE);
  322.   TEST ("s0.find(\"KKK\")", s0.find("KKK"), TRUE);
  323.   TEST ("s0.find(\"GGG\")", s0.find("GGG"), TRUE);
  324.   TEST ("s1=s0", (s1=s0, s0.count() == s1.count()), 1);
  325.   TEST ("s1.find(\"CCC\")", s1.find("CCC"), TRUE);
  326.   TEST ("s1.find(\"HHH\")", s1.find("HHH"), TRUE);
  327.   TEST ("s1.find(\"III\")", s1.find("III"), FALSE);
  328.   TEST ("s1.find(\"KKK\")", s1.find("KKK"), TRUE);
  329.   TEST ("s1.find(\"GGG\")", s1.find("GGG"), TRUE);
  330. }  
  331.  
  332. int my_strcmp (const CoolString& s1, const CoolString& s2) {
  333.   return strcmp(s1, s2);
  334. }
  335.  
  336. void test_String() {
  337.   CoolBinary_Tree<CoolString> s0;
  338.   CoolString bbb("BBB"), ccc("CCC"), ddd("DDD"), eee("EEE");
  339.   CoolString fff("FFF"), ggg("GGG"), hhh("HHH"), iii("III");
  340.   CoolString jjj("JJJ"), kkk("KKK"), lll("LLL"), mmm("MMM"), nnn("NNN");
  341.   
  342.   TEST ("CoolBinary_Tree<CoolString> s0", s0.count(), 0);
  343.   TEST ("s0.set_compare(&my_strcmp)",(s0.set_compare(&my_strcmp),1),1);
  344.   TEST ("s0.put(CoolString(\"LLL\"))", s0.put(lll), TRUE);
  345.   TEST ("s0.count()", s0.count(), 1);
  346.   TEST ("s0.find(CoolString(\"LLL\"))", s0.find(lll), TRUE);
  347.   TEST ("s0.value()", (strcmp (s0.value(),lll)), 0);
  348.   TEST ("s0.remove()", s0.remove(), TRUE);
  349.   TEST ("s0.count()", s0.count(), 0);
  350.   TEST ("s0.put(CoolString(\"DDD\"))", s0.put(ddd), TRUE);
  351.   TEST ("s0.count()", s0.count(), 1);
  352.   TEST ("s0.put(CoolString(\"HHH\"))", s0.put(hhh), TRUE);
  353.   TEST ("s0.count()", s0.count(), 2);
  354.  
  355.   TEST ("s0.put(CoolString(\"CCC\"))", s0.put(ccc), TRUE);
  356.   TEST ("s0.count()", s0.count(), 3);
  357.   TEST ("s0.put(CoolString(\"LLL\"))", s0.put(lll), TRUE);
  358.   TEST ("s0.count()", s0.count(), 4);
  359.   TEST ("s0.put(CoolString(\"BBB\"))", s0.put(bbb), TRUE);
  360.   TEST ("s0.count()", s0.count(), 5);
  361.   TEST ("s0.put(CoolString(\"FFF\"))", s0.put(fff), TRUE);
  362.   TEST ("s0.count()", s0.count(), 6);
  363.  
  364.   TEST ("s0.find(CoolString(\"BBB\"))", s0.find(bbb), TRUE);
  365.   TEST ("s0.value()", (strcmp (s0.value(),bbb)), 0);
  366.   TEST ("s0.reset()", (s0.reset(), 1), 1);
  367.   TEST ("s0.next()", s0.next(), TRUE);
  368.   TEST ("s0.value()", (strcmp (s0.value(),bbb)), 0);
  369.   TEST ("s0.next()", s0.next(), TRUE);
  370.   TEST ("s0.value()", (strcmp (s0.value(),ccc)), 0);
  371.   TEST ("s0.next()", s0.next(), TRUE);
  372.   TEST ("s0.value()", (strcmp (s0.value(),ddd)), 0);
  373.   TEST ("s0.next()", s0.next(), TRUE);
  374.   TEST ("s0.value()", (strcmp (s0.value(),fff)), 0);
  375.   TEST ("s0.prev()", s0.prev(), TRUE);
  376.   TEST ("s0.value()", (strcmp (s0.value(),ddd)), 0);
  377.   TEST ("s0.prev()", s0.prev(), TRUE);
  378.   TEST ("s0.value()", (strcmp (s0.value(),ccc)), 0);
  379.   TEST ("s0.next()", s0.next(), TRUE);
  380.   TEST ("s0.value()", (strcmp (s0.value(),ddd)), 0);
  381.   TEST ("s0.next()", s0.next(), TRUE);
  382.   TEST ("s0.value()", (strcmp (s0.value(),fff)), 0);
  383.   TEST ("s0.next()", s0.next(), TRUE);
  384.   TEST ("s0.value()", (strcmp (s0.value(),hhh)), 0);
  385.   TEST ("s0.next()", s0.next(), TRUE);
  386.   TEST ("s0.value()", (strcmp (s0.value(),lll)), 0);
  387.   TEST ("s0.count()", s0.count(), 6);
  388.   TEST ("s0.find(CoolString(\"JJJ\"))", s0.find(jjj), FALSE);
  389.  
  390.  
  391.   CoolBinary_Tree<CoolString> s1(s0);
  392.   TEST ("CoolBinary_Tree<CoolString> s1(s0)", s1.count(), 6);
  393.   TEST ("s0.balance()", (s0.balance(), s0.count()), 6);
  394.   TEST ("s1.remove(CoolString(\"CCC\"))", s1.remove(ccc), TRUE);
  395.   TEST ("s1.count()", s1.count(), 5);
  396.   TEST ("s1.find(CoolString(\"CCC\"))", s1.find(ccc), FALSE);
  397.   TEST ("s0.remove(CoolString(\"CCC\"))", s0.remove(ccc), TRUE);
  398.   TEST ("s0.count()", s0.count(), 5);
  399.   TEST ("s0.find(CoolString(\"CCC\"))", s0.find(ccc), FALSE);
  400.   TEST ("s0.put(CoolString(\"KKK\"))", s0.put(kkk), TRUE);
  401.   TEST ("s0.count()", s0.count(), 6);
  402.   TEST ("s0.put(CoolString(\"MMM\"))", s0.put(mmm), TRUE);
  403.   TEST ("s0.count()", s0.count(), 7);
  404.   TEST ("s0.put(CoolString(\"NNN\"))", s0.put(nnn), TRUE);
  405.   TEST ("s0.count()", s0.count(), 8);
  406.   TEST ("s0.put(CoolString(\"LLL\"))", s0.put(lll), FALSE);
  407.   TEST ("s0.count()", s0.count(), 8);
  408.   TEST ("s0.put(CoolString(\"EEE\"))", s0.put(eee), TRUE);
  409.   TEST ("s0.count()", s0.count(), 9);
  410.   TEST ("s0.put(CoolString(\"GGG\"))", s0.put(ggg), TRUE);
  411.   TEST ("s0.count()", s0.count(), 10);
  412.   TEST ("s0.put(CoolString(\"CCC\"))", s0.put(ccc), TRUE);
  413.   TEST ("s0.count()", s0.count(), 11);
  414.   TEST ("s0.balance()", (s0.balance(), s0.count()), 11);
  415.   TEST ("s0.find(CoolString(\"CCC\"))", s0.find(ccc), TRUE);
  416.   TEST ("s0.find(CoolString(\"HHH\"))", s0.find(hhh), TRUE);
  417.   TEST ("s0.find(CoolString(\"III\"))", s0.find(iii), FALSE);
  418.   TEST ("s0.find(CoolString(\"KKK\"))", s0.find(kkk), TRUE);
  419.   TEST ("s0.find(CoolString(\"GGG\"))", s0.find(ggg), TRUE);
  420.   TEST ("s1=s0", (s1=s0, s0.count() == s1.count()), 1);
  421.   TEST ("s1.find(CoolString(\"CCC\"))", s1.find(ccc), TRUE);
  422.   TEST ("s1.find(CoolString(\"HHH\"))", s1.find(hhh), TRUE);
  423.   TEST ("s1.find(CoolString(\"III\"))", s1.find(iii), FALSE);
  424.   TEST ("s1.find(CoolString(\"KKK\"))", s1.find(kkk), TRUE);
  425.   TEST ("s1.find(CoolString(\"GGG\"))", s1.find(ggg), TRUE);
  426. }  
  427.  
  428.  
  429. void test_equal (void) {
  430.   CoolBinary_Tree<int> b0, b1;
  431.   for (int i = 0; i < 10; i++) {
  432.     b0.put (i);
  433.     b1.put (i);
  434.   }
  435.   TEST ("b0 == b1", b0 == b1, TRUE);
  436.   b0.put (11);
  437.   TEST ("b0 != b1", b0 != b1, TRUE);
  438. }
  439.  
  440. void test_leak () {
  441.   for (;;) {
  442.     test_int_put ();
  443.     test_int ();
  444.     test_charP ();
  445.     test_String ();
  446.     test_equal ();
  447.   }
  448. }
  449.  
  450. int main () {
  451.   START("CoolBinary_Tree");
  452.   test_int_put ();
  453.   test_int ();
  454.   test_charP ();
  455.   test_String ();
  456.   test_equal ();
  457. #if LEAK
  458.   test_leak ();
  459. #endif
  460.   SUMMARY ();
  461.   return 0;
  462. }
  463.